/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SemanticoPacote;

import SemanticoPacote.TratamentoErroSemantico.ErroSemantico;
import compilador_full.TabelaSimbolos;

/**
 *
 * @author Fernanda
 */
public class CmdFor {

    CmdWhile cmdWhile = new CmdWhile();
    cmd cmd = new cmd();
    ExpAtribuicaoFor expAtribFor = new ExpAtribuicaoFor();

    public void sintaxeCmdFor(TabelaSimbolos tabelaSimbolos, String escopo) {


        tabelaSimbolos.soConsome();//consome o for
        tabelaSimbolos.soConsome();//consome o (

        expAtribFor.sintaxeExpAtribuicaoFor(tabelaSimbolos, escopo);//consome expressao de atribuicao do for

        // seta o ultimo tipo
        tabelaSimbolos.setUltimoTipoVar("int");
        TermoRelacional.termoRelacional(tabelaSimbolos,escopo);//consome o termo relacional

        tabelaSimbolos.soConsome();//consome o ;

        if (!tabelaSimbolos.validaNome(escopo, tabelaSimbolos.getLookahead())) {
            System.out.println(" ERRO SEMANTICO - Variável " + tabelaSimbolos.getLookahead() + " não declarada");
            ErroSemantico.getInstance().getTabelaErros().add("Erro Semântico na linha " +tabelaSimbolos.getLinha() + ". Descrição: Variável não foi declarada");
        }

        tabelaSimbolos.soConsome();//consome o identificador

        if (tabelaSimbolos.getLookahead().equals("++")) {
            tabelaSimbolos.soConsome();//consome ++
            }


        else if (tabelaSimbolos.getLookahead().equals("--")) {
            tabelaSimbolos.soConsome();//consome --
            }


        else if (tabelaSimbolos.getLookahead().equals("=")) {
            tabelaSimbolos.soConsome();//consome =

            ExpressaoAritmetica expArit = new ExpressaoAritmetica();
            expArit.expAritmetica(tabelaSimbolos, escopo, "int");//consome expressao aritmetica

        }

        tabelaSimbolos.soConsome();//consome )

        if (tabelaSimbolos.getLookahead().equals("{")) {

            tabelaSimbolos.soConsome();//consome {

            while (cmdWhile.verificaInicioCmd(tabelaSimbolos)) {
                cmd.sintaxeCmd(tabelaSimbolos, escopo);
            }

            tabelaSimbolos.soConsome();//consome }

        } else if (cmdWhile.verificaInicioCmd(tabelaSimbolos)) {
            cmd.sintaxeCmd(tabelaSimbolos, escopo);
        }

    }

}
